import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JOptionPane;


/**
* Esta clase representa el controlador de las diferentes partidas
*
* @author Juan Belmonte, Carmen Parra, Luis Rodriguez
* @version 0.5.0
*/
public class ControladorJuego implements WindowListener,ActionListener {
	
	public boolean[] cartasDescartadas = {false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false};
	
	private String[] apuestasJugadores = {"no","no","no","no"};
	//lo uso para saber si el jug ha apostado (si/no), o subido la apuesta (subio) o visto la apuesta (vio)
	//longitud 4 porque es una posición por jugador
	
//	private int [][] indicesCartasDescarte = null;
	
	public boolean [] seHaDescartado = {false, false, false, false};
	
	private int apuestaPar1, apuestaPar2 = 0;
	
	private int manoVaca;
	
	private boolean pausada, guardada = false;
	
	private Partida partida;
	
	private int numApuesta =0;

	private int turno = 0;
	
	//mano de juego, numero del jugador
	private int manoJuego = 0;

	private TableroJuego tableroJuego = null;
	
	private ControladorPrincipal controladorPrincipal;
	
	/**
	* Constructor por copia de la clase ControladorJuego
	* 
	* @param win TableroJuego(JInternalFrame) que se le pasa al constructor.
	*  
	*/
	public ControladorJuego(TableroJuego win, Partida partida, ControladorPrincipal controladorPrincipal){
		this.partida = partida;
		this.controladorPrincipal = controladorPrincipal;
		this.tableroJuego=win; 
	}
	
	public void setVentanaControlada(TableroJuego v) {
		this.tableroJuego = v;
	}
	
	
	public TableroJuego getTableroJuego() {
		return tableroJuego;
	}

	public Partida getPartida() {
		return partida;
	}

	
	public void setManoJuego(int mano){
		this.manoJuego=mano;
	}
	
	public int getManoJuego(){
		return this.manoJuego;
	}

	public void setPartida(Partida partida) {
		this.partida = partida;
	}

	public int getTurno(){
		return this.turno;
	}
	
	public int getTurnoUltimo() {
		if(manoJuego ==0){
			return 3;
		}else{
			return manoJuego-1;
		}
	}
	
	public int getTurnoSiguiente() {
		if(turno!=3){
			return turno +1;
		}else{
			return 0;
		}
	}
	
	public int getTurnoAnterior() {
		if(turno!=0){
			return turno -1;
		}else{
			return 3;
		}
	}
	
	public void setTurnoSiguiente(){
		if(turno!=3){
			turno++;
		}else{
			turno=0;
		}
	}
	
	public void setTurnoAnterior(){
		if(turno!=0){
			turno--;
		}else{
			turno=3;
		}
	}
	
	public void setTurnoInicio(){
		turno=manoJuego;
	}
	
	public boolean turnoEsUltimo(){
		return this.turno==getTurnoUltimo();
	}

	public void setTurno(int turno) {
		this.turno = turno;
	}
	
	
	/**
	* Metodo simple que resetea el array de jugadores descartados
	* 
	*/
	public void reseteoSeHaDescartado(){
		for (int i = 0; i < this.seHaDescartado.length; i++) {
			this.seHaDescartado[i]=false;
		}

	}
	
	/**
	* Metodo simple que resetea el array de cartas descartadas
	* 
	*/
	public void reseteoCartasDescartadas(){
		for (int i = 0; i < this.cartasDescartadas.length; i++) {
			this.cartasDescartadas[i]=false;
		}

	}
	
	
	/**
	* Metodo que devuelve de que jugador es la apuesta según la mano de juego y el turno de la mano en juego.
	* 
	* @param manoJuego entero que indica el numero de jugador que es mano en el juego
	* @param turno entero que indica el turno del jugador
	*  
	*/
	public String apuestaJugPareja(int manoJuego, int turno){
		int numJ = partida.devolverNumJug(turno, manoJuego);
		if(numJ<2){
			return apuestasJugadores[numJ+2];
		}else if(numJ==2){
			return apuestasJugadores[0];
		}else{
			return apuestasJugadores[1];
		}
		
	}

	/**
	* Metodo que gestiona eventos de "accion"
	* 
	* @param evento ActionEvent que se pasa por cabecera que indica el evento ocurrido.
	*  
	*/
	public void actionPerformed(ActionEvent evento) {
		Logger.logTrace("Ocurri� un evento de acci�n");
		if(controladorPrincipal.getSeJuega() == "MUS"){
			if(evento.getSource().equals(tableroJuego.mus)){
				if(controladorPrincipal.getHayMus()){
					if(turnoEsUltimo()){
						this.setTurnoInicio();
						controladorPrincipal.setSeJuega("DESCARTE");
						String seJuega = controladorPrincipal.getSeJuega();
						tableroJuego.rotarVista(controladorPrincipal.getNombresJug()[manoJuego], manoJuego,seJuega);
						tableroJuego.incluirBotonesDescarte();
						tableroJuego.repaint();
					}else{
						this.setTurnoSiguiente();
						tableroJuego.rotarVista(controladorPrincipal.getNombresJug()[turno],turno, null);						
						tableroJuego.repaint();
					}
				}
			}else if(evento.getSource().equals(tableroJuego.cortarMus)){
				controladorPrincipal.setHayMus(false);
				controladorPrincipal.setSeJuega("A GRANDE");
				this.setTurnoInicio();
				tableroJuego.rotarVista(controladorPrincipal.getNombresJug()[manoJuego],manoJuego,null);
				tableroJuego.crearVistaApuestas();
				tableroJuego.repaint();
			}
		}else if(controladorPrincipal.getSeJuega()=="DESCARTE"){
			int pos = turno*4;
			if(evento.getSource().equals(tableroJuego.getCartaGUI(pos))){
				tableroJuego.moverCarta(turno,0);
				tableroJuego.repaint();
			}else if(evento.getSource().equals(tableroJuego.getCartaGUI(pos + 1))){
				tableroJuego.moverCarta(turno,1);
				tableroJuego.repaint();
			}else if(evento.getSource().equals(tableroJuego.getCartaGUI(pos + 2))){
				tableroJuego.moverCarta(turno,2);
				tableroJuego.repaint();
			}else if(evento.getSource().equals(tableroJuego.getCartaGUI(pos + 3))){
				tableroJuego.moverCarta(turno,3);
				tableroJuego.repaint();
			}else if(evento.getSource().equals(tableroJuego.descarte)){
				if(!this.seHaDescartado[turno]){
					JOptionPane.showMessageDialog(null, "Debe descartarse");
				}else{
					if(turnoEsUltimo()){
						//Aqui ahora en cambio, al haberse ido descartando hay que repartir "n" cartas a cada uno
						this.setTurnoInicio();
						descarte(cartasDescartadas);
						controladorPrincipal.setSeJuega("MUS");
						String seJuega = controladorPrincipal.getSeJuega();
						tableroJuego.rotarVistaMus(partida,cartasDescartadas, turno);
						tableroJuego.rotarVista(controladorPrincipal.getNombresJug()[manoJuego],manoJuego,seJuega);
						tableroJuego.incluirBotonesMus();
						tableroJuego.repaint();
						int p =0;
						for(int i=0; i<cartasDescartadas.length;i++){
//							System.out.print(cartasDescartadas[i] + "\\");
							if(i==3 || i==7 || i==11 || i==15){
//								System.out.print("--> " + seHaDescartado[p] + "\n");
								p++;
							}
						}
						reseteoSeHaDescartado();
						reseteoCartasDescartadas();
					}else{
						this.setTurnoSiguiente();
						tableroJuego.rotarVista(controladorPrincipal.getNombresJug()[turno],turno, null);
						tableroJuego.repaint();
					}
				}
			}	
		}else if(controladorPrincipal.getSeJuega()=="A GRANDE" || controladorPrincipal.getSeJuega()=="A CHICA"
			|| controladorPrincipal.getSeJuega()=="A PARES" || controladorPrincipal.getSeJuega()=="A JUEGO"){
			
			//A PARTIR DE AQUI ESTAMOS EN ZONA DE "APUESTAS", podremos envidar o pasar.
			
			if(evento.getSource().equals(tableroJuego.pasar)){				
				metodoPulsarPasar();
			}else if(evento.getSource().equals(tableroJuego.mas)){
				int n = Integer.parseInt(tableroJuego.valor.getText());
				n++;
				tableroJuego.valor.setText("" + n);
			}else if(evento.getSource().equals(tableroJuego.menos)){
				int n = Integer.parseInt(tableroJuego.valor.getText());
				if(apuestaPar1 != 0 || apuestaPar2!=0){//quiere decir que ya han envidao
					if(apuestaPar1 > apuestaPar2){//"manda" la apuesta 1
						if(n>apuestaPar1){
							n--;
							tableroJuego.valor.setText("" + n);
						}
					}else{
						if(n>apuestaPar2){
							n--;
							tableroJuego.valor.setText("" + n);
						}
					}
				}else{
					if(n!=0 ){
						n--;
						tableroJuego.valor.setText("" + n);
					}
				}
			}else if(evento.getSource().equals(tableroJuego.envidar)){
				this.metodoPulsarEnvidar();
			}else if(evento.getSource().equals(tableroJuego.pasarSena)){
				//System.out.print("El jugador " + partida.getJugadores()[turno].getNombre() + " ha pasado una seña, la numero ");
				manoVaca = partida.getVacasPartida()[partida.getVacasPartida().length - 1].getManosVaca().length - 1;
				//System.out.print(partida.getSenas()[0].getNumSena() + "\n");
				tableroJuego.pintarSena(turno,partida.getSenas()[0].getNumSena());
				tableroJuego.repaint();
			}
		}else if(evento.getSource().equals(tableroJuego.nuevaMano)){
			if(controladorPrincipal.getSeJuega() == "FIN MANO"){
				//GUARDAR ESTADISTICAS EN UN FICHERO
				//partida.guardarEstadisticasMano(); --> falta implementarlo
				partida.getVacasPartida()[partida.getVacasPartida().length - 1].nuevaMano(partida.getJugadores());
				controladorPrincipal.setSeJuega("MUS");
				JuegoCartas mismoJuego = new JuegoCartas();
				Baraja nuevaBaraja = new Baraja(mismoJuego);
				partida.setBarajaPartida(nuevaBaraja);
				partida.getBarajaPartida().barajar();
				partida.setBarajaDescartes(null);
				partida.repartir();
				turno=manoJuego;
				this.setTurnoSiguiente();
				manoJuego=turno;
				tableroJuego.crearVistaNuevaMano(manoJuego);
				tableroJuego.repaint();
				controladorPrincipal.setHayMus(true);
			}
		}
		if(evento.getSource().equals(tableroJuego.opc1)){
			pausada=true;			
			//Pausar partida --> desactivo todos los botones del tablero
			//System.out.println(controladorPrincipal.getSeJuega());
			Logger.logTrace("Partida Pausada");
			tableroJuego.desactivarTodo(controladorPrincipal.getSeJuega());
			tableroJuego.repaint();
			JOptionPane.showMessageDialog(null, "Partida pausada");
		}else if(evento.getSource().equals(tableroJuego.opc2)){
			if(pausada && !guardada){
				Logger.logTrace("Partida Guardada");
				partida.guardarDatosPartidaPausa(manoJuego,turno, controladorPrincipal.getSeJuega());
				guardada=true;
				JOptionPane.showMessageDialog(null, "Partida guardada");
			}else if(guardada){
				JOptionPane.showMessageDialog(null, "Ya se ha guardado");
			}else{
				JOptionPane.showMessageDialog(null, "Se debe pausar antes");
			}
		}else if(evento.getSource().equals(tableroJuego.opc6)){
			if(pausada){
				tableroJuego.activarComponentes(controladorPrincipal.getSeJuega());
				tableroJuego.repaint();
				Logger.logTrace("Partida reanudada");
				JOptionPane.showMessageDialog(null, "Partida reanudada");
			}else{
				JOptionPane.showMessageDialog(null, "No hay pausada ninguna partida");
			}
		}
	}
	
	/**
	* Metodo que gestiona lo que se hace cuando se pulsa envidar
	* 
	*  
	*/
	public void metodoPulsarPasar(){
		
		int mano = partida.getVacasPartida()[partida.getVacasPartida().length - 1].getManosVaca().length - 1;
		
		//AQUI hay que tener cuidado, teniendo en cuenta las reglas del mus y viendo
		//como pueden ir llegando las apuestas segun 

		//Miro a ver si hay apuesta ya
		if(Integer.parseInt(tableroJuego.valor.getText())!=0){
			//Quiere decir que ya hay apuesta
			//miro si mi compañeo pasó o no
			if(turno == 0 || turno==2){
				if(apuestaJugPareja(manoJuego, turno) =="paso"){
					//Si paso quiere decir que se acaba la apuesta al pasar tb el otro jugador de la pareja
					if(partida.devolverNumJug(turno, manoJuego) ==0 || partida.devolverNumJug(turno, manoJuego) ==2){
						apuestaPar2 = Integer.parseInt(tableroJuego.valor.getText());
						partida.getVacasPartida()[partida.getVacasPartida().length-1].getManosVaca()[mano].setApuesta(new Apuesta(0, apuestaPar2), numApuesta);
					}else{
						apuestaPar1 = Integer.parseInt(tableroJuego.valor.getText());
						partida.getVacasPartida()[partida.getVacasPartida().length-1].getManosVaca()[mano].setApuesta(new Apuesta( apuestaPar1, 0), numApuesta);
					}
					apuestaPar1 = 0;
					apuestaPar2 = 0;
					pasarApuestaSiguiente();
				}else{
					
					//quiere decir que alguien mejoro la apuesta
					apuestasJugadores[turno]="paso";
					tableroJuego.actualizarPanel(partida.getJugadores()[turno].getNombre(), turno, "pasa");
					this.setTurnoSiguiente();
					this.setTurnoSiguiente();
					tableroJuego.rotarVista(partida.getJugadores()[turno].getNombre(), turno, null);						
					tableroJuego.repaint();
				}
			}else{
				if(apuestaJugPareja(manoJuego, turno)=="paso"){
					//Si paso quiere decir que se acaba la apuesta al pasar tb el otro jugador de la pareja
					if(partida.devolverNumJug(turno, manoJuego) ==0 || partida.devolverNumJug(turno, manoJuego) ==2 ){
						apuestaPar2 = Integer.parseInt(tableroJuego.valor.getText());
						partida.getVacasPartida()[partida.getVacasPartida().length-1].getManosVaca()[mano].setApuesta(new Apuesta(0, apuestaPar2), numApuesta);
					}else{
						apuestaPar1 = Integer.parseInt(tableroJuego.valor.getText());
						partida.getVacasPartida()[partida.getVacasPartida().length-1].getManosVaca()[mano].setApuesta(new Apuesta( apuestaPar1, 0), numApuesta);
					}
					apuestaPar1 = 0;
					apuestaPar2 = 0;
					pasarApuestaSiguiente();
				}else{
					
					//quiere decir que alguien mejoro la apuesta							
					apuestasJugadores[turno]="paso";
					tableroJuego.actualizarPanel(partida.getJugadores()[turno].getNombre(), turno, "pasa");
					this.setTurnoAnterior();
					this.setTurnoAnterior();
					tableroJuego.rotarVista(partida.getJugadores()[turno].getNombre(), turno, null);						
					tableroJuego.repaint();
				}							
			}					
		}else{
			//paso turno sin mas	
			if(!this.turnoEsUltimo()){
				apuestasJugadores[turno]="paso";
				tableroJuego.actualizarPanel(partida.getJugadores()[turno].getNombre(), turno, "pasa");
				this.setTurnoSiguiente();
				tableroJuego.rotarVista(partida.getJugadores()[turno].getNombre(), turno, null);						
				tableroJuego.repaint();
			}else{
				//Pero si el jugador es el 3º se acabo la apuesta
				partida.getVacasPartida()[partida.getVacasPartida().length-1].getManosVaca()[mano].setApuesta(new Apuesta(0, 0), numApuesta);
				apuestaPar1 = 0;
				apuestaPar2 = 0;
				pasarApuestaSiguiente();
			}
		}//SE ACABO PASAR
	}
	
	/**
	* Metodo que gestiona lo que se hace cuando se pulsa envidar
	* 
	*  
	*/
	public void metodoPulsarEnvidar(){
		if(Integer.parseInt(tableroJuego.valor.getText()) < 2){
			JOptionPane.showMessageDialog(null, "El envite mínimo es de 2");
		}else{
			manoJuego = partida.getVacasPartida()[partida.getVacasPartida().length - 1].getManosVaca().length - 1;
					
			//ENVIDAR es una parte sencilla, bastante metódica, pasar era mucho más complicado
			if(apuestaPar1==0 && apuestaPar2==0){//NADIE HA ENVIDADO
				//Querra decir que nadie ha envidado
								
				if(partida.devolverNumJug(turno, manoJuego) ==0 || partida.devolverNumJug(turno, manoJuego) ==2){
					apuestasJugadores[1] = "no";
					apuestasJugadores[3] = "no";
					apuestaPar1 = Integer.parseInt(tableroJuego.valor.getText());
					partida.getVacasPartida()[partida.getVacasPartida().length-1].getManosVaca()[manoJuego].setApuesta(new Apuesta(apuestaPar1,0), numApuesta);
				}else{
					apuestasJugadores[0] = "no";
					apuestasJugadores[2] = "no";
					apuestaPar2 = Integer.parseInt(tableroJuego.valor.getText());
					partida.getVacasPartida()[partida.getVacasPartida().length-1].getManosVaca()[manoJuego].setApuesta(new Apuesta(0,apuestaPar2), numApuesta);
				}
				
				if(!this.turnoEsUltimo()){
					apuestasJugadores[turno] = "si";
					tableroJuego.actualizarPanel(partida.getJugadores()[turno].getNombre(), turno, "envida");
					this.setTurnoSiguiente();
					tableroJuego.rotarVista(partida.getJugadores()[turno].getNombre(), turno, null);						
					tableroJuego.repaint();
				}else{
					//Si el turno es el ultimo la cosa cambia, porque  hay que volver al jug que sea mano
					if(manoJuego==0 || manoJuego==2){
						apuestasJugadores[0] = "no";
						apuestasJugadores[2] = "no";
					}else{
						apuestasJugadores[1] = "no";
						apuestasJugadores[3] = "no";
					}
					tableroJuego.limpiarPanelJug();
					apuestasJugadores[turno] = "si";
					tableroJuego.actualizarPanel(partida.getJugadores()[turno].getNombre(), turno, "envida");
					turno=manoJuego;
					tableroJuego.rotarVista(partida.getJugadores()[turno].getNombre(), turno, null);						
					tableroJuego.repaint();
				}
			}else{
				if(!this.turnoEsUltimo()){
					//Si ya ha habido apuesta querrá decir entonces que hay dos opciones (subo o igualo)
					
					//miro a ver si sube o vee la apuesta
					if(Integer.parseInt(tableroJuego.valor.getText()) >
					partida.getVacasPartida()[partida.getVacasPartida().length-1].getManosVaca()[manoVaca].getApuesta(numApuesta).getValorApuesta(this.getTurnoSiguiente())){
					
						//Si envidas más, habla el siguiente siempre, es decir jug2
						apuestasJugadores[turno] = "subio";
						if(partida.devolverNumJug(turno, manoJuego) ==0 || partida.devolverNumJug(turno, manoJuego) ==2){//pareja1
							apuestasJugadores[1] = "no";
							apuestasJugadores[3] = "no";
							apuestaPar1 = Integer.parseInt(tableroJuego.valor.getText());
							apuestaPar2 = partida.getVacasPartida()[partida.getVacasPartida().length-1].getManosVaca()[manoVaca].getApuesta(numApuesta).getValorApuesta(getTurnoSiguiente());
						}else{//pareja2
							apuestasJugadores[0] = "no";
							apuestasJugadores[2] = "no";
							apuestaPar1 = partida.getVacasPartida()[partida.getVacasPartida().length-1].getManosVaca()[manoVaca].getApuesta(numApuesta).getValorApuesta(getTurnoSiguiente());
							apuestaPar2 = Integer.parseInt(tableroJuego.valor.getText());
						}
						partida.getVacasPartida()[partida.getVacasPartida().length-1].getManosVaca()[manoVaca].setApuesta(new Apuesta(apuestaPar1,apuestaPar2), numApuesta);
						tableroJuego.actualizarPanel(partida.getJugadores()[turno].getNombre(), turno, "sube");
						this.setTurnoSiguiente();
						tableroJuego.rotarVista(partida.getJugadores()[turno].getNombre(), turno, null);						
						tableroJuego.repaint();
					}else{
						//Si iguala se terminó la apuesta
						apuestaPar1 = Integer.parseInt(tableroJuego.valor.getText());
						partida.getVacasPartida()[partida.getVacasPartida().length-1].getManosVaca()[manoVaca].setApuesta(new Apuesta(apuestaPar1, apuestaPar1), numApuesta);
						apuestaPar1 = 0;
						apuestaPar2 = 0;
						pasarApuestaSiguiente();									
					}
				}else{//turno ultimo
					//Se separa porque en valorApuesta tengo que hacerlo de turno-1 y no +1
					if(Integer.parseInt(tableroJuego.valor.getText()) >
					partida.getVacasPartida()[partida.getVacasPartida().length-1].getManosVaca()[manoVaca].getApuesta(numApuesta).getValorApuesta(this.getTurnoAnterior())){
						//si sube apuesta hablaría el jug siguiente, es decir el jug1 (turno==0)
						tableroJuego.limpiarPanelJug();
						apuestasJugadores[turno] = "subio";
						if(manoJuego==0 || manoJuego==2){
							apuestasJugadores[0] = "no";
							apuestasJugadores[2] = "no";
							apuestaPar2 = Integer.parseInt(tableroJuego.valor.getText());
							apuestaPar1 = partida.getVacasPartida()[partida.getVacasPartida().length-1].getManosVaca()[manoVaca].getApuesta(numApuesta).getValorApuesta(0);
						}else{
							apuestasJugadores[1] = "no";
							apuestasJugadores[3] = "no";
							apuestaPar1 = Integer.parseInt(tableroJuego.valor.getText());
							apuestaPar2 = partida.getVacasPartida()[partida.getVacasPartida().length-1].getManosVaca()[manoVaca].getApuesta(numApuesta).getValorApuesta(1);
						}
						partida.getVacasPartida()[partida.getVacasPartida().length-1].getManosVaca()[manoVaca].setApuesta(new Apuesta(apuestaPar1,apuestaPar2), numApuesta);
						tableroJuego.actualizarPanel(partida.getJugadores()[turno].getNombre(), turno, "sube");
						turno=manoJuego;
						tableroJuego.rotarVista(partida.getJugadores()[turno].getNombre(), turno, null);						
						tableroJuego.repaint();
						
					}else{
						//Si iguala se acabo la apuesta
						apuestaPar2 = Integer.parseInt(tableroJuego.valor.getText());
						partida.getVacasPartida()[partida.getVacasPartida().length-1].getManosVaca()[manoVaca].setApuesta(new Apuesta(apuestaPar2,apuestaPar2), numApuesta);
						apuestaPar1 = 0;
						apuestaPar2 = 0;
						pasarApuestaSiguiente();
					}
				}
			}					
		}
	}
	
	public void mostrarCartasMesa(){
		for(int i=0; i<partida.getCartasMesa().length;i++){
			if(i % 4 ==0){
				System.out.println("---------------------");
			}
				System.out.println(partida.getCartasMesa()[i].toString() + " -> " + partida.getCartasMesa()[i].getPath());
		}
		System.out.println("\n" + "\n");
	}
	
	/**
	* Metodo que pasa a la siguiente apuesta
	* 
	*  
	*/
	public void pasarApuestaSiguiente(){
		
		Logger.logTrace("Se pas� a la siguiente apuesta");
		
		tableroJuego.limpiarPanelJug();
		turno=manoJuego;
		
		//reseteo el array de apuestas de jugadores
		for(int i=0; i<apuestasJugadores.length;i++){
			apuestasJugadores[i] = "no";
		}
		
		if(controladorPrincipal.getSeJuega() == "A GRANDE"){
			controladorPrincipal.setSeJuega("A CHICA");
			tableroJuego.rotarVista(partida.getJugadores()[manoJuego].getNombre(), manoJuego, "A CHICA");
			numApuesta++;
			tableroJuego.valor.setText("0");
			tableroJuego.repaint();
		}else if(controladorPrincipal.getSeJuega() == "A CHICA"){
			//Aqui hay que meter entre medias un método que pregunte si se tiene pares
			controladorPrincipal.setSeJuega("A PARES");
			tableroJuego.rotarVista(partida.getJugadores()[manoJuego].getNombre(), manoJuego, "A PARES");
			numApuesta++;
			tableroJuego.valor.setText("0");
			tableroJuego.repaint();
		}else if(controladorPrincipal.getSeJuega() == "A PARES"){
//			Aqui hay que meter entre medias un método que pregunte si se tiene juego
			controladorPrincipal.setSeJuega("A JUEGO");
			tableroJuego.rotarVista(partida.getJugadores()[manoJuego].getNombre(), manoJuego, "A JUEGO");
			numApuesta++;
			tableroJuego.valor.setText("0");
			tableroJuego.repaint();
		}else{
			tableroJuego.mostrarCartas();
			controladorPrincipal.setSeJuega("FIN MANO");
			numApuesta=0;
			partida.conteo(this.getManoJuego());
			tableroJuego.actualizarMarcador(partida.getGanadoresApuestasMano());
			tableroJuego.repaint();
		}
	}
	

	/**
	* Metodo que rellena el array de cartas descartadas
	* 
	* @param cartasDescartas boolean[] sirve para saber de que cartas se han descartado los jugadores
	*  
	*/
	public void descarte(boolean [] cartasDescartadas){
		Logger.logTrace("Rellenando el array de cartas descartadas");
		for (int i = 0; i < cartasDescartadas.length; i++) {
			if(cartasDescartadas[i]){
				
				//Miro si me quedan cartas en la baraja
				if(partida.getBarajaPartida().longitud()<1){
					
					//Si no me quedan tengo que coger de la baraja descartes
					Carta[] aux = new Carta[partida.getBarajaDescartes().length + 1];
					for(int j=0; j<partida.getBarajaDescartes().length;j++){
						aux[j]=partida.getBarajaDescartes()[j];
					}
					aux[aux.length - 1] =  partida.getCartasMesa()[i];
					partida.setBarajaDescartes(aux);
					partida.insertarCartaMesa(partida.barajaDescartes[0], i);
					partida.redimensionarBarajaDescartes(0);
				}else{
					
					//Si si tengo 
					if(partida.getBarajaDescartes() == null){
						partida.barajaDescartes = new Carta[1];
						partida.barajaDescartes[0] = partida.getCartasMesa()[i];
						partida.insertarCartaMesa(partida.getBarajaPartida().getCarta(0), i);
						partida.getBarajaPartida().redimensionarBaraja(0);
						
					}else{
						Carta[] aux = new Carta[partida.getBarajaDescartes().length + 1];
						for(int j=0; j<aux.length-1;j++){
							aux[j]=partida.getBarajaDescartes()[j];
						}
						aux[aux.length - 1] =  partida.getCartasMesa()[i];
						partida.setBarajaDescartes(aux);
						partida.insertarCartaMesa(partida.getBarajaPartida().getCarta(0),i);
						partida.getBarajaPartida().redimensionarBaraja(0);
					}
				}
			}
		}
	}
	

	

	public void windowActivated(WindowEvent arg0) {
				
	}

	public void windowClosed(WindowEvent arg0) {
		
	}

	public void windowClosing(WindowEvent arg0) {
		
	}

	public void windowDeactivated(WindowEvent arg0) {
		
	}

	public void windowDeiconified(WindowEvent arg0) {
			
	}

	public void windowIconified(WindowEvent arg0) {
				
	}

	public void windowOpened(WindowEvent arg0) {
				
	}


}
